Computer systems are used in connection with a wide variety of applications. In addition, computer systems generally include a variety of resources, including processors, memory, input/output channels, etc., that can be used in connection with the performance of various tasks. Furthermore, computer systems may include multiple instances of a particular type of computer resource, or various combinations or resource types. In order to ensure the efficient operation of a computer system, it is important to allocate tasks among the various computer resources in a way that ensures the timely completion of the assigned task.
In a computer system that supports symmetrical multiprocessing, any task requiring processing can be assigned to any processor. A symmetrical multiprocessing system requires software applications that are multi-threaded. In addition, the successful operation of a symmetrical multiprocessing system often requires that all of the processors present in the system run at the same frequency and have the same performance characteristics. Accordingly, such a system typically cannot be expanded by, for example, adding a processor operating at a frequency that is different from the processor or processors already present in the system.
Another example of an existing computer system capable of assigning tasks among various computer resources relies on a hierarchy of processors. According to such a system, tasks are assigned by a central processor, which handles all software interrupts. The central processor assigns tasks to those resources best able to complete them. For example, in a hierarchal system, a task requiring the manipulation of numerical values may be assigned to a co-processor that is especially adapted to floating point operations. In a typical hierarchical system, the resources that may be used in connection with the system are limited to specialized hardware that is uniquely adapted for use in connection with existing hardware and software. Therefore, the type and number of resources that can be added to a hierarchal system are severely limited.
The expansion or modification of computer system capabilities is useful in a variety of applications. For example, the ability to expand the capabilities of a computer system is useful in connection with meeting the needs of a growing business. Likewise, computer resources that can be easily removed from a computing system, for example for reallocation in connection with another system, without requiring substantial revisions to the original system, are desirable. However, existing computing systems require that software used in connection with the system be reconfigured or modified in response to changes in available resources, to enable the system to adapt to changes in available resources. The reconfiguration or modification of software may include the resetting of software switches, or even the rewriting of software code. The need for changes in system software to allow systems to operate with different hardware resources make modifications to hardware resources associated with computer systems cumbersome and expensive. In addition, existing systems have been incapable of dynamically adapting to alterations in available resources. In particular, existing systems have been incapable of adapting to hardware resources having variable performance characteristics.
An example of a computer system in which the convenient expansion of computer resources is desirable is a telephone call processing system. In existing call processing systems, expansion is possible by interconnecting carriers containing additional processors or other hardware resources to the system. However, each processor or other resource must have performance characteristics matched to the resources already installed in the system. This is because the operating software is incapable of recognizing differences in the performance of hardware resources (for example, processors) interconnected to the system. Therefore, a system designed for use with a processor operating at a first speed could not efficiently use the additional processing capability of a processor operating at a second, higher speed.